package com.example.blog.common;

import org.springframework.util.DigestUtils;
import org.springframework.util.StringUtils;

import java.nio.charset.StandardCharsets;
import java.util.UUID;

/**
 * @Author YJ
 * @Date 2023/9/13 18:07
 * Description:加盐加密/解密
 */
public class PasswordUtils {

    /**
     * 密码加盐
     * @param password 输入的密码
     * @return
     */
    public static String encrypt(String password) {
        //1.盐值
        String salt = UUID.randomUUID().toString().replace("-", "");
        //2.将盐值+密码进行md5加密 得到最终密码
        String finalPassword = DigestUtils.md5DigestAsHex((password + salt).getBytes(StandardCharsets.UTF_8));
        //3.返回盐值和最终密码
        return salt + "$" + finalPassword;
    }

    /**
     * 解密
     *
     * @param password   用户输入的密码
     * @param dbPassword 数据库中的最终密码
     * @return
     */
    public static boolean decrypt(String password, String dbPassword) {
        //1.获取数据库中的盐值
        if (!StringUtils.hasLength(password)
                || !StringUtils.hasLength(dbPassword)
                || dbPassword.length() != 65) {
            return false;
        }
        //2.将用户输入的密码与盐值进行MD5加密，得到最终待验证密码
        String[] strArray = dbPassword.split("\\$");
        if (strArray.length != 2) {
            return false;
        }
        //盐值
        String salt = strArray[0];
        //数据库中的最终密码
        String pwd = strArray[1];
        //加密待验证密码
        String finalPwd = DigestUtils.md5DigestAsHex((password+salt).getBytes(StandardCharsets.UTF_8));
        //3.将最终待验证密码与数据库中的最终密码进行比较
        if(finalPwd.equals(pwd)) {
            return true;
        }
        return false;
    }
}
